WTEL-8487: Restrict has_file filter to call recordings in calls history - #454
Conversation
kirychukyurii
left a comment
There was a problem hiding this comment.
може використати опції, щоб не дублювати логіку? в поточному вигляді це важко підтримувати..
або інший варіант - додати у view окреме поле has_record, і у фільтрах використовувати його
крім того, тут пасував би індекс на storage.files, бо цей метод використовується часто і часто є проблеми, що запит виконується довго
згоден із проблемою дублювання, але замість sqloptions я би запропонував спільний хелпер у sqlstore (бо опції не покривають Aggregate через аліас і вимагали б зміни інтерфейсів); індекс додати, але частковий, рівно під умову фільтра |
так, давай тоді через спільний хелпер |
Проблема
Фільтр "Запис розмови" у розділі History (has_file=true в /api/calls/history) повертав дзвінки з будь-яким прикріпленим файлом: скріншотами, записами екрана оператора тощо. Причина в тому, що умова в SQL перевіряла лише наявність колонки files (files notnull), а view cc_calls_history_list агрегує в неї всі файли зі storage.files за uuid дзвінка без фільтра за типом.
Вирішення
Умова has_file замінена на прямий exists до storage.files з критерієм "запис розмови": не видалений, з каналом call (або NULL для легасі-записів, створених до появи колонки channel) та mime-типом audio/* або video/. Це відсікає скріншоти (зокрема збережені з каналом call, але з image/), записи екрана оператора (screenrecording) та інші.